package com.zhang.service;

import com.zhang.data_object.UserDO;
import com.zhang.repository.UserRepo;
import com.zhang.view_object.UserVO;
import org.mindrot.jbcrypt.BCrypt;

/**
 * @author happy
 **/
public class UserService {
    private final UserRepo userRepo = new UserRepo();

    public UserVO register(String username, String password) {
        //1.现对密码做好'加密',保证数据库保存的不是明文密码
        String salt = BCrypt.gensalt();
        password = BCrypt.hashpw(password,salt);
        //2.完成数据库表插入操作
        UserDO userDO = new UserDO(username,password);
        userRepo.insert(userDO);
        //3.将数据库直接的得到的数据转换成使用的表现形式
        return new UserVO(userDO);
    }

    public UserVO login(String username, String password) {
        // 1. 根据用户名从表中查询数据，用UserDO对象表示
        UserDO userDO = userRepo.selectOneByUsername(username);
        if (userDO == null) {
            // 用户名有问题
            return null;
        }
        // 2. 检查密码是否正确
        // plaintext：明文密码 --- 用户传入密码
        // hashed:经过hash后的密码 --- 从表中查出来的密码
        if (BCrypt.checkpw(password,userDO.password)) {
            // 返回true，用户输入密码大概率正确
            return new UserVO(userDO);
        }else {
            // 代表用户输入密码一定有问题
            return null;
        }
    }
}